package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import domain.*;

public class AdministradorPersistenciaConsumo {
	private static AdministradorPersistenciaConsumo pool;
	private AdministradorPersistenciaServicio administradorPersistenciaServicio;

	private AdministradorPersistenciaConsumo() {
		administradorPersistenciaServicio = AdministradorPersistenciaServicio.getInstancia();
	}

	public static AdministradorPersistenciaConsumo getInstancia() {
		if (pool == null)
			pool = new AdministradorPersistenciaConsumo();
		return pool;
	}
	
	public Consumo getConsumo(int consumoId) {
		Connection con = PoolConnection.getPoolConnection().getConnection();
		Consumo c = null;
		try {

			String senten = "SELECT * from Consumos where ConsumoId = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, consumoId);
			ResultSet result = ps.executeQuery();

			while (result.next()){
				Servicio s = administradorPersistenciaServicio.getServicio(result.getInt("ServicioId"));
				c = new Consumo(result.getInt("ConsumoId"), result.getInt("Cantidad"), result.getDate("Fecha"), s);		
			}

			PoolConnection.getPoolConnection().realeaseConnection(con);

		} catch (SQLException e) {
			System.out.println("Error al Cargar el Consumo: "
					+ e.getMessage());			
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		return c;
	}
	
	public void update(Consumo consumo) {
		// Obtener conexion BD
		Connection con = PoolConnection.getPoolConnection().getConnection();

		// Generar sentencia SQL
		try {
			// Preparar sentencia insert en tabla destino
			String senten = "UPDATE Consumos set estado = ? where ConsumoId = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, consumo.getEstado());
			ps.setInt(2, consumo.getId());
			int result = ps.executeUpdate();

			PoolConnection.getPoolConnection().realeaseConnection(con);

		} catch (SQLException e) {
			System.out.println("Mensaje Error al Modificar el estado de Consumo: "
					+ e.getMessage());
			System.out.println("Stack Trace al Modificar  el estado de Consumo "
					+ e.getStackTrace());
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		
	}
}
